#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#define sto using
#define cxy namespace
#define orz std;
sto cxy orz;

const int mod=10007;

int T,n;
string c;

struct abc{
	int id;
	string s;
}hx[10010];

int check()
{
	int j=0,last=0;
	for(int i=1;i<=5;i++,j++,last=j)
	{
		int flg=0,t=0;
		for(;c[j]>='0'&&c[j]<='9'&&j<n&&t<=65535;j++)
			t=t*10+c[j]-'0',flg=1;
		if(!flg) return 1;
		if(i<5&&t>255) return 1;
		if(i==5&&t>65535) return 1;
		if(i<4&&c[j]!='.') return 1;
		if(i==4&&c[j]!=':') return 1;
		if(c[last]=='0'&&t) return 1;
	}
	if(j!=n+1)
		return 1;
	return 0;
}

void hh(int g)
{
	int s=0;
	for(int i=0;i<n;i++)
		s=c[i]*131%mod;
	while(hx[s].id&&hx[s].s!=c) s=(s+1)%mod;
	if(!hx[s].id)
	{
		hx[s]=(abc){g,c};
		printf("OK\n");
	}
	else
		printf("FAIL\n");
}

void fd()
{
	int s=0;
	for(int i=0;i<n;i++)
		s=c[i]*131%mod;
	while(hx[s].id&&hx[s].s!=c) s=(s+1)%mod;
	if(!hx[s].id)
		printf("FAIL\n");
	else
		printf("%d\n",hx[s].id);
}

int main()
{
	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);
	cin>>T;
	for(int g=1;g<=T;g++)
	{
		char tp[10];
		cin>>tp>>c;
		n=c.size();
		if(check())
		{
			printf("ERR\n");
			continue;
		}
		if(tp[0]=='S')
			hh(g);
		else
			fd();
	}
}
